#!/bin/bash

# springboot-docker-start.sh
# 用于Docker容器内启动Spring Boot应用的脚本

# 工作目录（可通过环境变量配置，默认为/app）
WORK_DIR="${WORK_DIR:-/app}"

# 日志目录
ECHO_LOG_DIR="${LOG_DIR:-/app}/logs"

# 创建工作目录和日志目录
mkdir -p "$WORK_DIR" "$ECHO_LOG_DIR"
chmod 755 "$WORK_DIR" "$ECHO_LOG_DIR"

# 应用名称
APP_NAME=$(basename "$WORK_DIR"/*.jar | sed 's/\.jar$//')

# JVM参数（仅使用用户设置的参数）
JVM_OPTS="${JVM_OPTS:-}"

# 添加Java日志配置
JVM_OPTS="$JVM_OPTS -Dfile.encoding=UTF-8 -Dlogging.file.name=$ECHO_LOG_DIR/application.log"

# Spring Boot参数
SPRING_OPTS="${SPRING_OPTS:-}"

# 环境变量转Spring属性
for env_var in $(env | grep '^\(SPRING_\|spring_\)'); do
    env_key=$(echo "$env_var" | cut -d= -f1)
    env_value=$(echo "$env_var" | cut -d= -f2)

    spring_key=$(echo "$env_key" | sed 's/^\(SPRING_\|spring_\)//' | tr '[:upper:]' '[:lower:]')
    spring_key=$(echo "$spring_key" | tr '_' '.')

    SPRING_OPTS="$SPRING_OPTS --spring.$spring_key=$env_value"
done

# 日志文件路径
LOG_FILE="$ECHO_LOG_DIR/application.log"

# 打印启动信息
echo "Starting $APP_NAME in Docker container"
echo "Working Directory: $WORK_DIR"
echo "JVM Options: $JVM_OPTS"
echo "Spring Boot Options: $SPRING_OPTS"
echo "Logging to: $LOG_FILE"

# 启动Spring Boot应用，直接输出到控制台并同时重定向到日志文件
java $JVM_OPTS -jar "$WORK_DIR/${APP_NAME}.jar" $SPRING_OPTS 2>&1 | tee -a "$LOG_FILE" &
MAIN_PID=$!

# 捕获终止信号，确保优雅退出
trap 'kill -TERM $MAIN_PID' SIGINT SIGTERM

# 等待主进程结束
wait $MAIN_PID
EXIT_CODE=$?

exit $EXIT_CODE